#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
const int mod=999999999;
int n,Q,op,op2,op3,x,y;
long long a[4005][4005],tree[4005][4005];
int lowbit(int x)
{
	return x&(-x);
}
void add(int id,int x,int v)
{
	for(int i=x;i<=n;i+=lowbit(i))
	{
		tree[id][i]+=v;
	}
}
long long ask(int id,int x)
{
	long long res=0;
	for(int i=x;i>=1;i-=lowbit(i))
	{
		res+=tree[id][i];
	}	
	return res;
}
int main()
{
	freopen("fire.in","r",stdin);
	freopen("fire.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>Q;
	while(Q--)
	{
		cin>>op;
		if(op==1)
		{
			cin>>op2>>x>>op3>>y;
			if(op2==0)
			{
				for(int i=1;i<=n;i++)
				{
					int t=a[x][i];
					if(op3==1)
					{
						a[x][i]&=y;
					}
					else if(op3==2)
					{
						a[x][i]|=y;
					}
					else if(op3==3)
					{
						a[x][i]^=y;
					}
					else
					{
						a[x][i]=(a[x][i]+y)%mod;
					}
					t=a[x][i]-t;
					add(x,i,t);
				}
			}
			else
			{
				for(int i=1;i<=n;i++)
				{
					int t=a[i][x];
					if(op3==1)
					{
						a[i][x]&=y;
					}
					else if(op3==2)
					{
						a[i][x]|=y;
					}
					else if(op3==3)
					{
						a[i][x]^=y;
					}
					else
					{
						a[i][x]=(a[i][x]+y)%mod;
					}		
					t=a[i][x]-t;
					add(i,x,t);
				}				
			}
		}
		else
		{
			long long ans=0;
			cin>>x>>y;
			for(int i=1;i<=x;i++)
			{
				ans+=ask(i,y);
			}
			cout<<ans<<endl;
		}
	}
	return 0;
}
